package com.ls.fw.data.exp;

import com.ls.fw.data.exp.Comparison.Operator;
import com.ls.fw.data.visitor.ExpressionVisitor;


/**
 * 条件表达式
 * @author ls
 * 2014年12月16日下午3:23:03
 */
public abstract class Expression {

	public abstract void accept(ExpressionVisitor visitor);
	
	
	/**
     * Creates and returns an {@link Or} instance.
     * @author ls
     * 2014年12月16日下午2:50:36 
     *
     * @param expressions the expressions
     * @return an instance
     */
    public static Or or(Expression... expressions) {
        return new Or(expressions);
    }

    /**
     * Creates and returns an {@link And} instance.
     * @author ls
     * 2014年12月16日下午2:50:36 
     *
     * @param expressions the expressions
     * @return an instance
     */
    public static And and(Expression... expressions) {
        return new And(expressions);
    }

   /**
    * Creates and returns an {@link Comparison}
    * instance.
    * @author ls
    * 2014年12月16日下午2:50:36 
    * @param name
    * @param operator
    * @param value
    * @param value1
    * @return
    */
    public static Comparison comparison(String name, Operator operator, Object value,
			Object value1) {
        return new Comparison(name, operator, value, value1);
    }

    /**
     * Creates and returns an {@link Comparison}
     * instance.
     * @author ls
     * 2014年12月16日下午2:50:36 
     *
     * @param name         the column name
     * @param operator       the operator
     * @param value          the value
     * @return the instance
     */
    public static Comparison comparison(String name, Operator operator, Object value) {
        return new Comparison(name, operator, value);
    }

    /**
     * Creates and returns an {@link Comparison}
     * instance.
     * @author ls
     * 2014年12月16日下午2:50:36 
     *
     * @param name    the name
     * @param value     the value
     * @return the instance
     */
    public static Comparison comparison(String name, Object value) {
        return new Comparison(name, value);
    }
 
    public static Comparison comparison(String name, String... values) {
        return new Comparison(name, values);
    }
    
    
    /**
     * 聚合函数表达式
     * @Description: TODO(用一句话描述该方法做什么)
     * @author lisheng
     * @date 2014年12月18日 下午11:35:58
     * @version V1.0
     * @param name
     * @param params
     * @return
     */
    public static MethodComparison methodComparison(String name, Object... params){
    	 return new MethodComparison(name, params);
    }
}
